package com.zenithmind.document.pojo.query;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 文档查询DTO
 *
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "文档查询DTO")
public class DocumentQueryDTO {

    /**
     * 页码
     */
    @Schema(description = "页码")
    private Integer current = 1;

    /**
     * 每页大小
     */
    @Schema(description = "每页大小")
    private Integer size = 10;

    /**
     * 关键词
     */
    @Schema(description = "关键词")
    private String keyword;

    /**
     * 文档名称
     */
    @Schema(description = "文档名称")
    private String name;

    /**
     * 文档类型
     */
    @Schema(description = "文档类型")
    private String type;

    /**
     * 文档类型列表
     */
    @Schema(description = "文档类型列表")
    private List<String> types;

    /**
     * 文档分类ID
     */
    @Schema(description = "文档分类ID")
    private String categoryId;

    /**
     * 文档分类ID列表
     */
    @Schema(description = "文档分类ID列表")
    private List<String> categoryIds;

    /**
     * 标签
     */
    @Schema(description = "标签")
    private String tag;

    /**
     * 标签列表
     */
    @Schema(description = "标签列表")
    private List<String> tags;

    /**
     * 文档状态
     */
    @Schema(description = "文档状态")
    private Integer status;

    /**
     * 访问权限
     */
    @Schema(description = "访问权限")
    private Integer accessLevel;

    /**
     * 创建者ID
     */
    @Schema(description = "创建者ID")
    private String creatorId;

    /**
     * 创建者ID列表
     */
    @Schema(description = "创建者ID列表")
    private List<String> creatorIds;

    /**
     * 文件大小范围-最小值
     */
    @Schema(description = "文件大小范围-最小值")
    private Long minFileSize;

    /**
     * 文件大小范围-最大值
     */
    @Schema(description = "文件大小范围-最大值")
    private Long maxFileSize;

    /**
     * 创建时间范围-开始时间
     */
    @Schema(description = "创建时间范围-开始时间")
    private LocalDateTime createTimeStart;

    /**
     * 创建时间范围-结束时间
     */
    @Schema(description = "创建时间范围-结束时间")
    private LocalDateTime createTimeEnd;

    /**
     * 更新时间范围-开始时间
     */
    @Schema(description = "更新时间范围-开始时间")
    private LocalDateTime updateTimeStart;

    /**
     * 更新时间范围-结束时间
     */
    @Schema(description = "更新时间范围-结束时间")
    private LocalDateTime updateTimeEnd;

    /**
     * 是否包含内容搜索
     */
    @Schema(description = "是否包含内容搜索")
    private Boolean includeContent;

    /**
     * 是否只查询最新版本
     */
    @Schema(description = "是否只查询最新版本")
    private Boolean onlyLatest;

    /**
     * 是否包含已删除
     */
    @Schema(description = "是否包含已删除")
    private Boolean includeDeleted;

    /**
     * 排序字段
     */
    @Schema(description = "排序字段")
    private String sortField;

    /**
     * 排序方向
     */
    @Schema(description = "排序方向")
    private String sortDirection;

    /**
     * 高级搜索表达式
     */
    @Schema(description = "高级搜索表达式")
    private String searchExpression;
}
